home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_319 / cnewssrc / cnews.orig.lzh / expire / mkdbm.c < prev    next >
C/C++ Source or Header  |  1989-06-27  |  974b  |  51 lines

  1. /*
  2.  * mkdbm - rebuild dbm file for a history file
  3.  *
  4.  * History file on standard input; the dbm database is generated as
  5.  * hist.dir and hist.pag.
  6.  */
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <ctype.h>
  10.  
  11. char buf[4096];            /* ought to be plenty */
  12.  
  13.  
  14. char *progname = "mkdbm";
  15. typedef struct { char *dptr; int dsize; } datum;
  16.  
  17. main()
  18. {
  19.     register char *scan;
  20.     long place;
  21.     datum lhs;
  22.     datum rhs;
  23.     register int ret;
  24.  
  25.     close(creat("hist.dir", 0666));
  26.     close(creat("hist.pag", 0666));
  27.     dbminit("hist");
  28.  
  29.     for (;;) {
  30.         place = ftell(stdin);
  31.         if (fgets(buf, sizeof(buf), stdin) == NULL)
  32.             break;
  33.  
  34.         scan = strchr(buf, '\t');
  35.         if (scan == NULL || buf[strlen(buf)-1] != '\n') {
  36.             fprintf(stderr, "bad format: %s", buf);
  37.             exit(1);
  38.         }
  39.         *scan = '\0';
  40.  
  41.         lhs.dptr = buf;
  42.         lhs.dsize = strlen(buf) + 1;
  43.         rhs.dptr = (char *)&place;
  44.         rhs.dsize = sizeof place;
  45.         ret = store(lhs, rhs);
  46.         if (ret < 0)
  47.             fprintf(stderr, "dbm failure '%s' @ %ld\n", buf, place);
  48.     }
  49.     exit(0);
  50. }
  51.